// 这个文件会帮我们打包 packages下的模块， 最终打包出js文件
// node dev.js （要打包的名字 -f 打包的格式） === argv.slice(2)

import minimist from 'minimist'
import { resolve, dirname} from 'path'
import { fileURLToPath } from 'url'
import { createRequire } from 'module'
import esbuild from 'esbuild'

// node中的命令函参数通过process 来获取 process.argv
const args = minimist(process.argv.slice(2)) // 解析命令行参数

// 当前文件的路径
const __dirname = dirname(fileURLToPath(import.meta.url))

// 当前文件的路径
const require = createRequire(import.meta.url)

// 打包那个项目
const target = args._[0] || "reactivity"
// 打包后的模块化规范 iife规范: 
const format = args.f || "iife" 

// 入口文件 根据命令行提供的路径来进行解析
const entry = resolve(__dirname, `../packages/${target}/src/index.ts`)
const pkg = require(`../packages/${target}/package.json`)

// 根据需要进行打包
console.log(resolve(__dirname, `../packages/${target}/dist/${target}.js`));

// 打包命令: node dev.js reactivity -f iife

esbuild.context({
  entryPoints: [entry], // 入口
  outfile: resolve(__dirname, `../packages/${target}/dist/${target}.js`), // 出口
  bundle: true, // reactivity -> shared 会打包到一起
  platform: "browser", // 打包成浏览器的代码
  sourcemap: true, // 可以调试源代码
  format,
  globalName: pkg.buildOptions?.name, // 打包后的全局变量名
})
.then(ctx => ctx.rebuild()) // 监听文件变化
